<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>最接近的三数之和</title>
  </head>
  <body>
    <script>
      //     给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数，使它们的和与 target 最接近。
      // 返回这三个数的和。
      // 假定每组输入只存在恰好一个解。

      // 示例 1：

      // 输入：nums = [-1,2,1,-4], target = 1
      // 输出：2
      // 解释：与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode.cn/problems/3sum-closest
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

      /**
       * @param {number[]} nums
       * @param {number} target
       * @return {number}
       */
      var threeSumClosest = function (nums, target) {
        const len = nums.length
        if (len < 3) {
          return Infinity
        }
        nums.sort((a, b) => a - b)
        let min = Infinity
        for (let i = 0; i < len; i++) {
          let left = i + 1
          let right = len - 1
          while (right > left) {
            const sum = nums[i] + nums[left] + nums[right]
            if (Math.abs(sum - target) < Math.abs(min - target)) {
              min = sum
            }
            if (sum < target) {
              left++
            } else if (sum > target) {
              right--
            } else {
              return sum
            }
          }
        }
        return min
      }
      console.log(threeSumClosest([], 1))
    </script>
  </body>
</html>
